package com.hxc.controller;

import com.hxc.anno.Log;
import com.hxc.entity.Emp;
import com.hxc.entity.EmpQueryParam;
import com.hxc.entity.PageBean;
import com.hxc.entity.Result;
import com.hxc.service.EmpService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@Slf4j
@RestController
public class EmpController {
    @Autowired
    private EmpService empService;
    /**
     * 查询员工信息
     * */
    @GetMapping("/emps")
//    public Result page(String name, Integer gender,
//                       @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate begin,
//                       @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate end,
//                       @RequestParam(defaultValue = "1") Integer page,
//                       @RequestParam(defaultValue = "10") Integer pageSize) {
    // 使用一个实体类对象封装变量
    public Result page(EmpQueryParam param) {
        log.info("请求查询员工：姓名{}，性别{}，开始日期{}，结束日期{}，第{}页，共{}条数据",param.getName(),param.getGender(),param.getBegin(),param.getEnd(),param.getPage(),param.getPageSize());
        PageBean pageBean = empService.page(param);
        return Result.success(pageBean);
    }
    /**
     * 新增员工
     * */
    @Log
    @PostMapping("/emps")
    public Result add(@RequestBody Emp emp) {
        log.info("开始新增员工：用户名{}，姓名{}，性别{}......",emp.getUsername(),emp.getName(),emp.getGender() );
        empService.add(emp);
        return Result.success();
    }
    /**
     * 批量删除员工
     * */
    @Log
    @DeleteMapping("/emps")
    public Result delete(@RequestParam List<Integer> ids) {
        // 接收数组参数使用@ResquestParam List<> ids,这个注解可以将数组转换成集合
        // Integer[] ids也可直接使用这种方法接收
        log.info("正在删除员工，id：{}......",ids);
        empService.delete(ids);
        return Result.success();
    }
    /**
     * 根据id查询
     * */
    @GetMapping("/emps/{id}")
    public Result getById(@PathVariable Integer id) {
        log.info("开始查询id={}的员工信息......",id);
        Emp emp = empService.getById(id);
        return Result.success(emp);
    }
    /**
     *  修改员工信息
     * */
    @Log
    @PutMapping("/emps")
    public Result update(@RequestBody Emp emp) {
        log.info("更新员工信息：{}",emp);
        empService.update(emp);
        return Result.success();
    }
    /**
     * 查询所有员工
     * */
    @GetMapping("/emps/list")
    public Result getAllEmp() {
        log.info("查询所有员工");
        List<Emp> emps = empService.getAllEmp();
        return Result.success(emps);
    }

}
